home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / magazi~1 / 404 / timers.c < prev    next >
C/C++ Source or Header  |  1989-04-11  |  3KB  |  107 lines

  1. #include <stdio.h>
  2. #include <osbind.h>
  3.  
  4. extern long timcnt;           /* time counter */
  5. extern int  intr();           /* ISR reference */
  6.  
  7. main()
  8. {
  9.      long t1, t2;             /* time values */
  10.      int  i;                  /* loop count */
  11.      char k;                  /* loop exit control character */
  12.  
  13.      k = 0;
  14.  
  15.      init_tmr();              /* initialize & start msec timer */
  16.  
  17.      while( k != 'q') {            
  18.  
  19.           printf("Initial timcnt value is %D\n", timcnt);
  20.           wait_ms(100L);                /* 100 msec delay */
  21.           printf("After first delay, timcnt = %D\n", timcnt);
  22.  
  23.           t1 = timcnt;                  /* time marker #1 */
  24.           wait_sec(10L);                /* 10 second delay */
  25.           wait_ms(250L);                /* 250 msec delay */
  26.  
  27.           calc_ms(t1,"since t1");       /* result should be 10250 msec */
  28.  
  29.           t2 = timcnt;                  /* time marker #2 */
  30.           for(i=0; i<9000; i++)         /* dummy code loop */
  31.                k = k;                   
  32.  
  33.           calc_ms(t2,"since t2");       /* dummy code execution time */
  34.  
  35.           calc_ms(t2, 0L);               /* same call without id string */
  36.  
  37.           printf("To quit, type a 'q', otherwise ");
  38.           printf("strike another key \n");
  39.           k = Bconin(2);
  40.      }
  41.  
  42.      Jdisint(13);                       /* disable timer a interrupt:
  43.                                            required before exit!!     */
  44.  
  45. }
  46.  
  47. init_tmr()            /* Initialize Timer A */
  48. {
  49.      timcnt = 0;
  50.  
  51.      Jdisint(13);                       /* disable timer a interrupt */
  52.  
  53.      Xbtimer(0x00, 0x04, 49, intr);   /*   set up timer a:
  54.                                         0x04 = prescale divide by 50 
  55.                                           49 = count down value 
  56.                                       intr = interrupt vector 
  57.                                                 (ISR address)     */
  58.  
  59.      Jenabint(13);                      /* enable timer a interrupt */
  60.  
  61. }
  62.  
  63.  
  64. wait_ms(ms)              /* Delay 'ms' milliseconds */
  65. long ms;
  66. {
  67.      long delta, t1;
  68.      
  69.      delta = 0;
  70.      t1 = timcnt;
  71.  
  72.      while(delta < ms) {
  73.           delta = timcnt - t1;
  74.      }
  75. }
  76.  
  77. wait_sec(sec)            /* Delay 'sec' seconds */
  78. long sec;
  79. {
  80.      long diff, t1;
  81.      
  82.      diff = 0;
  83.      t1 = timcnt;
  84.  
  85.      while(diff < sec) {
  86.           diff = (timcnt - t1) / 1000;    /* convert to seconds */
  87.      }
  88. }
  89.  
  90. calc_ms(t1, str)         /* Calculate elapsed time in milliseconds */
  91. long t1;
  92. char *str;
  93. {
  94.      long t2;
  95.  
  96.      t2 = timcnt;
  97.  
  98.      if(str)
  99.           printf("Elapsed time = %D msec %s\n", t2 - t1, str);
  100.      else
  101.           printf("Elapsed time = %D msec \n", t2 - t1);
  102.  
  103.      return((int)(t2 - t1));
  104. }
  105.  
  106.  
  107.